import http from '@ohos.net.http';
import Logger from './Logger';


export class Response<T> {
  /**
   * 响应码
   */
  status: number
  /**
   * 相应消息
   */
  message: string
  /**
   * 相应数据
   */
  result: T
}

export const escapes = function (html) {
  return String(html)
    .replace(/&(?!\w+;)/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
}

export class Http {
  constructor() {
  }

  public get(url: string, header?: Object): Promise<string> {

    return this.request(url, http.RequestMethod.GET, header)
  }

  public post(url: string, header?: Object, extraData?: string | object): Promise<string> {
    return this.request(url, http.RequestMethod.POST, header, extraData)

  }

  public async request(url: string, method: http.RequestMethod, header: Object, extraData?: string | object): Promise<string> {
    Logger.info('==request====', 'url=' + url);

    let httpRequest = http.createHttp();
    var options = extraData ? {
      method: method, // 可选，默认为http.RequestMethod.GET
      header: header,
      extraData: extraData,
      expectDataType: http.HttpDataType.STRING, // 可选，指定返回数据的类型
    } : {
      method: method,
      header: header,
      expectDataType: http.HttpDataType.STRING, // 可选，指定返回数据的类型
    }
    Logger.info('==request====', 'options=' + JSON.stringify(options));
    let responseResult = await httpRequest.request(url, options)

    if (responseResult.responseCode === 200) {
      Logger.info('==request====', 'value=' + responseResult.result);
      // response.data = responseResult.result;
      // response.code = responseResult.responseCode;
      // response.msg = '';
      return responseResult.result as string;
    } else {

      // response.msg = '请求错误';
      // response.code = responseResult.responseCode;
      return '';
    }

    return '';
    // return responseResult.then((value: http.HttpResponse) => {
    //   Logger.info('==request====', 'url=' + url);
    //   Logger.info('==request====', 'responseCode=' + value.responseCode);
    //   Logger.info('==request====', 'resultType=' + value.resultType);
    //   if (value.responseCode === 200) {
    //     Logger.info('==request====', 'value=' + JSON.stringify(value.result));
    //     response.data = JSON.stringify(value.result);
    //     response.code = value.responseCode;
    //     response.msg = '';
    //   } else {
    //
    //     response.msg = '请求错误';
    //     response.code = value.responseCode;
    //   }
    //
    //   return response;
    // }).catch(() => {
    //   Logger.info('==request====', '请求错误=url=' + url);
    //   response.msg = '请求错误';
    //   response.code = 400;
    //   return response;
    // });

  }

  // public async getHeader(isApiTolen: boolean): Promise<object> {
  //
  //     const type = await this.preferencesUtil.getTokenType()
  //     const token =isApiTolen? await this.preferencesUtil.getApiToken():await this.preferencesUtil.getLoginToken()
  //     const header={
  //       'Content-Type': 'application/json',
  //       'Authorization': type + ' ' + token
  //     }
  //   Logger.info('tagtagtagtagtag=a===', 'getHeader header=' + header);
  //     return header
  //   this.kvManager.getTokenType(type => {
  //     this.kvManager.getApiToken(token => {
  //       Logger.info('tagtagtagtagtag=a===', 'getHeader token=' + token);
  //       callback({
  //         'Content-Type': 'application/json',
  //         'Authorization': type + ' ' + token
  //       })
  //     })
  //   })
  // } else {
  //   this.kvManager.getTokenType(type => {
  //     this.kvManager.getLoginToken(token => {
  //       Logger.info('tagtagtagtagtag=a===', 'getHeader token=' + token);
  //       callback({
  //         'Content-Type': 'application/json',
  //         'Authorization': type + ' ' + token
  //       })
  //     })
  //   })
  // }

  // }

  // /**
  //  * 普通token请求接口
  //  * @param url
  //  * @param callback
  //  */
  // public getLoginToken(url: string): Promise<Response> {
  //   this.getHeader(false, async header => {
  //     return await this.get(url, header)
  //   })
  //
  //
  // }
  //
  // public async postLoginToken(url: string, extraData?: string | object): Promise<Response> {
  //
  //
  //   const type = await this.kvManager.getTokenType()
  //   const token = await this.kvManager.getLoginToken()
  //   const header = {
  //     'Content-Type': 'application/json',
  //     'Authorization': type + ' ' + token
  //   }
  //   return await this.post(url, header, extraData)
  //
  // }
  //
  // public async getApiToken(url: string): Promise<Response> {
  //
  //   const type = await this.kvManager.getTokenType()
  //   const token = await this.kvManager.getApiToken()
  //   const header = {
  //     'Content-Type': 'application/json',
  //     'Authorization': type + ' ' + token
  //   }
  //   return await this.get(url, header)
  //
  // }
  //
  // public async postApiToken(url: string, extraData?: string | object): Promise<Response> {
  //   const type = await this.kvManager.getTokenType()
  //   const token = await this.kvManager.getApiToken()
  //   const header = {
  //     'Content-Type': 'application/json',
  //     'Authorization': type + ' ' + token
  //   }
  //   return await this.post(url, header, extraData)
  //
  //
  // }
}